// pages/list/list.js
const fetch = require('../../utils/fetch.js')
Page({

  /**
   * 页面的初始数据
   */
  data: {
    // 搜索框内容
    searchValue: '',
    // 当前显示的分类
    category:{},
    // 当前分类上的商店
    shops: [],
    // 是否显示加载更多
    isShowLoadmore: true
  },

  /**
   * js中单独使用到的数据
   */
  pageData: {
    // 分类id
    cat: null,
    // 查询参数
    querInfo: {
      // 当前显示数据的页码
      _page: 1,
      // 每页显示的数据条数
      _limit: 10,
      // 查询参数
      q: ''
    },
    // 是否可以加载更多数据
    canLoad: true,
    // 数据总页数
    totalPage: 0   
  },

  /**
   * 搜索框输入内容
   */
  searchInputHandle(e) {
    this.setData({ searchValue: e.detail.value })
    // 设置查询参数
    this.pageData.querInfo.q = this.data.searchValue.trim()
  },

  /**
   * 点击搜索按钮，按条件搜索
   */
  searchHandle() {
    // 显示加载图标
    this.setData({ isShowLoadmore: true })
    // 设置当前页码
    this.pageData.querInfo._page = 1
    // 清空数据
    this.setData({ shops: [] })
    // 加载数据
    this.loadmore()
  },

  /**
   * 加载更多数据
   */
  loadmore() {
    fetch(`categories/${ this.pageData.cat }/shops`, this.pageData.querInfo)
    .then(res => {
      // 确定当前分类是否有数据，若无数据直接隐藏加载图标并return
      if(res.data.length == 0) {
        // 隐藏加载
        this.setData({ isShowLoadmore: false })
        // 设置数据最大页数
        this.pageData.totalPage = 0
        return
      }
      // 计算数据最大页数
      let totalPage = Math.ceil(parseInt(res.header['x-total-count']) / this.pageData.querInfo._limit)
      // 设置数据最大页数
      this.pageData.totalPage = totalPage
      let shops = this.data.shops.concat(res.data)
      this.setData({ shops: shops })
      // 设置允许加载更多数据
      this.pageData.canLoad = true
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 设置禁止加载更多数据
    this.pageData.canLoad = false
    // 查询当前的分类信息
    fetch(`categories/${options.cat}`).then(res => {
      // 设置当前分类
      this.setData({ category: res.data })
      // 设置页面title
      wx.setNavigationBarTitle({
        title: this.data.category.name
      })
      // 设置当前分类id
      this.pageData.cat = options.cat

      // 查询当前分类下的商店
      this.loadmore()
    })

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    if(this.data.category.name) {
      // 设置页面title
      wx.setNavigationBarTitle({
        title: this.data.category.name
      })
    }
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    if (this.pageData.querInfo._page >= this.pageData.totalPage) {
      this.setData({ isShowLoadmore: false })
      return
    }
    if(this.pageData.canLoad) {
      this.pageData.canLoad = false
      // 加载下一页的数据
      this.pageData.querInfo._page += 1
      this.loadmore()
    }
    
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})